home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 9704 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  1.7 KB

  1. Path: keats.ugrad.cs.ubc.ca!not-for-mail
  2. From: c2a192@ugrad.cs.ubc.ca (Kazimir Kylheku)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: while loop problem
  5. Date: 12 Mar 1996 13:00:24 -0800
  6. Organization: Computer Science, University of B.C., Vancouver, B.C., Canada
  7. Message-ID: <4i4ol8INN3i4@keats.ugrad.cs.ubc.ca>
  8. References: <Pine.OSF.3.91.960312133449.7844B-100000@io.UWinnipeg.ca>
  9. NNTP-Posting-Host: keats.ugrad.cs.ubc.ca
  10.  
  11. In article <Pine.OSF.3.91.960312133449.7844B-100000@io.UWinnipeg.ca>,
  12. Bill Simpson  <wsimpson@uwinnipeg.ca> wrote:
  13. >Consider the following code fragment:
  14. >
  15. >y=2000; z=1000;
  16. >x=0;
  17. >while(x<=XMAX)
  18. >    {
  19. >    x+=(int) erand(mean);
  20. >    setdot(x,y,z);
  21. >    }
  22. >    
  23. >It plots a line of dots that are randomly (exponentially) spaced, giving
  24. >a 1D spatial Poisson process.
  25. >The problem is that dot x coordinates can only be between 0 and XMAX.
  26. >The above code will also attempt to plot one point at an x value >XMAX
  27. >before it terminates.
  28. >
  29. >Is there a nice way to write the code so it works properly?
  30.  
  31. Yes. Exploit the relationship between the poisson probability and the
  32. exponential probability. You are using exponential probability to model the
  33. time between poisson events. Why not model the poisson process in a direct
  34. way?
  35.  
  36. A quick and dirty answer is to restructure your loop so that the test for
  37. x<=XMAX is done before the next integration of erand() into x.
  38.  
  39. x = erand(mean);
  40.  
  41. do {
  42.     setdot(x,y,z);
  43.     x += erand(mean);
  44. } while (x <= XMAX);
  45.  
  46. >The only way I have thought of is
  47. >y=2000; z=1000;
  48. >x=0;
  49. >while(x<=XMAX)
  50. >    {
  51. >    x+=(int) erand(mean);
  52. >    if(x<=XMAX)
  53. >        setdot(x,y,z);
  54. >    }
  55.  
  56. Crude.
  57.  
  58. >which seems very clumsy since the same test is done twice.
  59.  
  60. Right you are. You are on the right track; that is why there are other looping
  61. structures such as for() and do while().
  62. -- 
  63.  
  64.